package org.japo.java.basics.main;

/*******************************************************************************
 * @author José A. Pacheco Ondoño
 * @version 1.0
 *
 * Sintaxis;
 *      java ClaseInteger | more
 *
 * Este programa sirve para ilustrar la utilización de los recursos de la clase 
 * Integer.
 ******************************************************************************/
public class ClaseInteger {

    /***************************************************************************
     * Método de entrada al programa
     * @param arg
     **************************************************************************/
    public static void main(String arg[]) {
        // Constantes
        final String FRASE = "13579";
        
        // Variables
        int numInt = 24680;
        Integer objInteger;

        // Constantes predefinidas
        System.out.println();
        System.out.println("Constantes predefinidas de la clase Integer ...");
        System.out.println("Valor mínimo de un entero MIN_VALUE --> " + 
                Integer.MIN_VALUE);
        System.out.println("Valor máximo de un entero MAX_VALUE --> " + 
                Integer.MAX_VALUE);
        System.out.println("Número de bits de la representación --> " + 
                Integer.SIZE);

        // Constructor a partir de un entero
        System.out.println();
        System.out.println("A partir del número ...");
        System.out.println(numInt);
        System.out.println("... se obtiene el objeto Integer ...");
        objInteger = new Integer(numInt);
        System.out.println(objInteger);

        // Constructor a partir de una cadena
        System.out.println();
        System.out.println("A partir de la cadena ...");
        System.out.println("\"" + FRASE + "\"");
        System.out.println("... se obtiene el objeto Integer ...");
        try {
            objInteger = new Integer(FRASE);
            System.out.println(objInteger);
        } catch (NumberFormatException nfe) {
            System.out.println("La cadena no se puede convertir a Integer ...");
            System.out.println(nfe);
        }

        // Conversión de una cadena a objeto Integer
        System.out.println();
        System.out.println("A partir de la cadena ...");
        System.out.println("\"" + FRASE + "\"");
        System.out.println("... se obtiene el objeto Integer ...");
        try {
            System.out.println(Integer.valueOf(FRASE));
        } catch (NumberFormatException nfe) {
            System.out.println("La cadena no se puede convertir a Integer ...");
            System.out.println(nfe);
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Integer.");

        // Conversión de una cadena a número entero
        System.out.println();
        System.out.println("A partir de la cadena ...");
        System.out.println("\"" + FRASE + "\"");
        System.out.println("... se obtiene el número entero ...");
        try {
            System.out.println(Integer.parseInt(FRASE));
        } catch (NumberFormatException nfe) {
            System.out.println("La cadena no se puede convertir a entero ...");
            System.out.println(nfe);
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Integer.");

        // Conversión de un número entero a cadena decimal
        System.out.println();
        System.out.println("A partir del número ...");
        System.out.println(numInt);
        System.out.println("... se obtiene su valor decimal en la cadena ...");
        System.out.println("\"" + Integer.toString(numInt) + "\"");
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Integer.");

        // Conversión de un número entero a cadena hexadecimal
        System.out.println();
        System.out.println("A partir del número ...");
        System.out.println(numInt);
        System.out.println("... se obtiene su valor hexadecimal ...");
        System.out.println("\"0x" + Integer.toHexString(numInt) + "\"");
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Integer.");

        // Conversión de un número entero a cadena octal
        System.out.println();
        System.out.println("A partir del número ...");
        System.out.println(numInt);
        System.out.println("... se obtiene su valor octal en la cadena ...");
        System.out.println("\"0" + Integer.toOctalString(numInt) + "\"");
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Integer.");

        // Conversión de un número entero a cadena binaria
        System.out.println();
        System.out.println("A partir del número ...");
        System.out.println(numInt);
        System.out.println("... se obtiene su valor binario unsigned ...");
        System.out.println("\"" + Integer.toBinaryString(numInt) + "\"");
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Integer.");

        // Conversión de un objeto Integer a cadena
        System.out.println();
        System.out.println("A partir del objeto Integer ...");
        numInt = 24680;
        objInteger = new Integer(numInt);
        System.out.println(objInteger);
        System.out.println("... se obtiene la cadena ...");
        System.out.println("\"" + objInteger.toString() + "\"");

        // Conversión de un objeto Integer a número byte
        System.out.println();
        System.out.println("A partir del objeto Integer ...");
        numInt = 24680;
        objInteger = new Integer(numInt);
        System.out.println(objInteger);
        System.out.println("... se obtiene el número de tipo byte ...");
        System.out.println(objInteger.byteValue());
        System.out.println("Nota: Puede haber desbordamiento.");

        // Conversión de un objeto Integer a número short
        System.out.println();
        System.out.println("A partir del objeto Integer ...");
        numInt = 24680;
        objInteger = new Integer(numInt);
        System.out.println(objInteger);
        System.out.println("... se obtiene el número de tipo short ...");
        System.out.println(objInteger.shortValue());
        System.out.println("Nota: Puede haber desbordamiento.");

        // Conversión de un objeto Integer a número int
        System.out.println();
        System.out.println("A partir del objeto Integer ...");
        numInt = 24680;
        objInteger = new Integer(numInt);
        System.out.println(objInteger);
        System.out.println("... se obtiene el número de tipo int ...");
        System.out.println(objInteger.intValue());

        // Conversión de un objeto Integer a número long
        System.out.println();
        System.out.println("A partir del objeto Integer ...");
        numInt = 24680;
        objInteger = new Integer(numInt);
        System.out.println(objInteger);
        System.out.println("... se obtiene el número de tipo long ...");
        System.out.println(objInteger.longValue());

        // Conversión de un objeto Integer a número float
        System.out.println();
        System.out.println("A partir del objeto Integer ...");
        numInt = 24680;
        objInteger = new Integer(numInt);
        System.out.println(objInteger);
        System.out.println("... se obtiene el número de tipo float ...");
        System.out.println(objInteger.floatValue());

        // Conversión de un objeto Integer a número double
        System.out.println();
        System.out.println("A partir del objeto Integer ...");
        numInt = 24680;
        objInteger = new Integer(numInt);
        System.out.println(objInteger);
        System.out.println("... se obtiene el número de tipo double ...");
        System.out.println(objInteger.doubleValue());
    }
}